package hashset02;

import java.util.HashSet;

/**
 * HashSet底层保证存储元素唯一的原理:
 *    新添加的元素与集合中已有的元素通过调用hashCode()方法比较哈希值
 *     如果两个元素的哈希值不同,新添加的元素直接存入
 *     如果两个元素的哈希值相同
 *        此时需要通过equals()方法比较两个元素内容,如果equals返回true,说明两个元素内容相同,此时新添加的元素就不再存入
 *        如果equals()方法返回false,说明两个元素内容不同,此时新添加的元素就要存入
 */
public class HashSetDemo01 {
    public static void main(String[] args) {
        HashSet<Person> people = new HashSet<>();
        people.add(new Person("张三", 19));//由于HashSet刚开始没有元素,那么张三直接添加集合中
        people.add(new Person("张三", 19));//new Person("张三",19).hashCode() 获取一个哈希值
                                                    //new Person("张三",19).hashCode() 获取一个哈希值
                                                    //由于Person new了两次是两个不同对象,所以哈希值不同,所以第二个张三直接存入

        people.add(new Person("王五", 22));//new Person("王五", 22).hashCode()获取一个哈希值
                                                    //由于此时又新创建了一个Person对象,所以它哈希值与上面的两个Person对象的哈希值不同
                                                  //此时王五这个元素直接存入集合
        System.out.println(people);
    }
}
